// http.js - uniapp请求封装
const baseURL = 'http://localhost:8080'; // 服务器基准地址

// 请求拦截器
const requestInterceptor = {
  invoke(options) {
    // 1. 基础URL拼接
    if (!options.url.startsWith('http')) {
      options.url = baseURL + options.url;
    }
    
    // 2. 添加Token到Header
    const token = uni.getStorageSync('adminToken');
    if (token) {
      options.header = options.header || {};
      options.header['token'] = token;
    }
    
    return options;
  }
};

// 添加拦截器到uni-request
uni.addInterceptor('request', requestInterceptor);

/**
 * 封装请求方法
 * @param {Object} options - 请求配置 { url, method, data, header }
 * @returns {Promise} 
 */
export const http = (options) => {
  return new Promise((resolve, reject) => {
    uni.request({
      ...options,
      success: (res) => {
        // 响应拦截器 - 处理401令牌失效
        if (res.data.code === 401) {
          uni.removeStorageSync('adminToken');
          uni.removeStorageSync('user');
          uni.showToast({
            icon: 'error',
            title: res.data?.msg || '登录已过期',
            duration: 2000
          });
          uni.reLaunch({ url: '/pages/login/login' });
          reject(new Error('Token expired'));
        } 
		if (res.data.code === 201) {
		  // 显示加载中提示
		  uni.showLoading({
		    mask: true
		  });
		  // 创建轮询检查
		  const pollInterval = setInterval(() => {
		    try {
		      // 发送请求到指定地址
		     uni.request({
		     	url:"http://localhost:8080/operation/findState",
		     	method:'GET',
		     	data:{operationId:res.data.data},
		     	success: (res1) => {
					if(res1.data.code == 502){
						// 关闭加载提示
						uni.hideLoading();
						uni.showToast({
							title:'服务器繁忙请稍后再试'
						})
					}
					if(res1.data.code != 201){
						uni.showToast({
							title:res1.data.msg
						})
						// 停止轮询
						clearInterval(pollInterval);
						
						// 关闭加载提示
						uni.hideLoading();
					}
		     	}
		     })
		    } catch (error) {
		      // 错误处理（可选）
		      console.error('轮询请求失败:', error);
		      
		      // 发生错误也停止轮询
		      clearInterval(pollInterval);
		      uni.hideLoading();
		      uni.showToast({
		        icon: 'error',
		        title: '网络异常',
		        duration: 2000
		      });
		    }
		  }, 50); // 每50毫秒轮询一次
		}
        // 其他成功状态
          resolve(res);
        // 其他异常状态
      },
      fail: (err) => {
        // 网络错误处理
        uni.showToast({
          icon: 'none',
          title: '网络连接异常',
          duration: 2000
        });
        reject(err);
      }
    });
  });
};

// 快捷方法封装
export const myGet = (url, params = {}, options = {}) => {
  return http({ url, method: 'GET', data: params, ...options });
};

export const myPost = (url, data = {}, options = {}) => {
  return http({ url, method: 'POST', data, ...options });
};